home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 3_2004-2005.ISO / Data / Zips / EXE_Protec183517112005.psc / Automatically Resize Form and Controls.bas < prev    next >
BASIC Source File  |  2004-10-22  |  8KB  |  286 lines

  1. Attribute VB_Name = "Resize"
  2. 'http://www.Planet-Source-Code.com/vb/scripts/ShowCode.asp?txtCodeId=7424&lngWId=1
  3. Public Type ctrObj
  4.   Name As String
  5.   Index As Long
  6.   Parrent As String
  7.   Top As Long
  8.   Left As Long
  9.   Height As Long
  10.   Width As Long
  11.   ScaleHeight As Long
  12.   ScaleWidth As Long
  13. End Type
  14.  
  15. Private FormRecord() As ctrObj
  16. Private ControlRecord() As ctrObj
  17. Private bRunning As Boolean
  18. Private MaxForm As Long
  19. Private MaxControl As Long
  20.  
  21. Private Function ActualPos(plLeft As Long) As Long
  22.   If plLeft < 0 Then
  23.     ActualPos = plLeft + 75000
  24.   Else
  25.     ActualPos = plLeft
  26.   End If
  27. End Function
  28.  
  29. Private Function FindForm(pfrmIn As Form) As Long
  30.   Dim i As Long
  31.   
  32.   FindForm = -1
  33.   If MaxForm > 0 Then
  34.     For i = 0 To (MaxForm - 1)
  35.       If FormRecord(i).Name = pfrmIn.Name Then
  36.         FindForm = i
  37.         Exit Function
  38.       End If
  39.     Next i
  40.   End If
  41. End Function
  42.  
  43.  
  44. Private Function AddForm(pfrmIn As Form) As Long
  45.   Dim FormControl As Control
  46.   Dim i As Long
  47.   ReDim Preserve FormRecord(MaxForm + 1)
  48.  
  49.   FormRecord(MaxForm).Name = pfrmIn.Name
  50.   FormRecord(MaxForm).Top = pfrmIn.Top
  51.   FormRecord(MaxForm).Left = pfrmIn.Left
  52.   FormRecord(MaxForm).Height = pfrmIn.Height
  53.   FormRecord(MaxForm).Width = pfrmIn.Width
  54.   FormRecord(MaxForm).ScaleHeight = pfrmIn.ScaleHeight
  55.  
  56.   FormRecord(MaxForm).ScaleWidth = pfrmIn.ScaleWidth
  57.   AddForm = MaxForm
  58.   MaxForm = MaxForm + 1
  59.  
  60.   For Each FormControl In pfrmIn
  61.     i = FindControl(FormControl, pfrmIn.Name)
  62.     If i < 0 Then i = AddControl(FormControl, pfrmIn.Name)
  63.   Next FormControl
  64. End Function
  65.  
  66. Private Function FindControl(inControl As Control, inName As String) As Long
  67.   Dim i As Long
  68.   
  69.   FindControl = -1
  70.   For i = 0 To (MaxControl - 1)
  71.     If ControlRecord(i).Parrent = inName Then
  72.       If ControlRecord(i).Name = inControl.Name Then
  73.         On Error Resume Next
  74.         
  75.         If ControlRecord(i).Index = inControl.Index Then
  76.           FindControl = i
  77.           Exit Function
  78.         End If
  79.         On Error GoTo 0
  80.       
  81.       End If
  82.     End If
  83.   Next i
  84. End Function
  85.  
  86. Private Function AddControl(inControl As Control, inName As String) As Long
  87.   ReDim Preserve ControlRecord(MaxControl + 1)
  88.   On Error Resume Next
  89.   
  90.   ControlRecord(MaxControl).Name = inControl.Name
  91.   ControlRecord(MaxControl).Index = inControl.Index
  92.   ControlRecord(MaxControl).Parrent = inName
  93.  
  94.   If TypeOf inControl Is Line Then
  95.     ControlRecord(MaxControl).Top = inControl.Y1
  96.     ControlRecord(MaxControl).Left = ActualPos(inControl.X1)
  97.     ControlRecord(MaxControl).Height = inControl.Y2
  98.     ControlRecord(MaxControl).Width = ActualPos(inControl.X2)
  99.   Else
  100.     ControlRecord(MaxControl).Top = inControl.Top
  101.     ControlRecord(MaxControl).Left = ActualPos(inControl.Left)
  102.     ControlRecord(MaxControl).Height = inControl.Height
  103.     ControlRecord(MaxControl).Width = inControl.Width
  104.   End If
  105.  
  106.   inControl.IntegralHeight = False
  107.   
  108.   On Error GoTo 0
  109.   AddControl = MaxControl
  110.   MaxControl = MaxControl + 1
  111. End Function
  112.  
  113. Private Function PerWidth(pfrmIn As Form) As Long
  114.   Dim i As Long
  115.   
  116.   i = FindForm(pfrmIn)
  117.   If i < 0 Then i = AddForm(pfrmIn)
  118.   
  119.   PerWidth = (pfrmIn.ScaleWidth * 100) \ FormRecord(i).ScaleWidth
  120. End Function
  121.  
  122. Private Function PerHeight(pfrmIn As Form) As Single
  123.   Dim i As Long
  124.   
  125.   i = FindForm(pfrmIn)
  126.   If i < 0 Then i = AddForm(pfrmIn)
  127.   
  128.   PerHeight = (pfrmIn.ScaleHeight * 100) \ FormRecord(i).ScaleHeight
  129. End Function
  130.  
  131. Private Sub ResizeControl(inControl As Control, pfrmIn As Form)
  132.   On Error Resume Next
  133.   Dim i As Long
  134.   Dim widthfactor As Single, heightfactor As Single
  135.   Dim minFactor As Single
  136.   Dim yRatio, xRatio, lTop, lLeft, lWidth, lHeight As Long
  137.   
  138.   yRatio = PerHeight(pfrmIn)
  139.   xRatio = PerWidth(pfrmIn)
  140.   i = FindControl(inControl, pfrmIn.Name)
  141.  
  142.   If inControl.Left < 0 Then
  143.     lLeft = CLng(((ControlRecord(i).Left * xRatio) \ 100) - 75000)
  144.   Else
  145.     lLeft = CLng((ControlRecord(i).Left * xRatio) \ 100)
  146.   End If
  147.  
  148.   lTop = CLng((ControlRecord(i).Top * yRatio) \ 100)
  149.   lWidth = CLng((ControlRecord(i).Width * xRatio) \ 100)
  150.   lHeight = CLng((ControlRecord(i).Height * yRatio) \ 100)
  151.   
  152.   If TypeOf inControl Is Line Then
  153.     If inControl.X1 < 0 Then
  154.       inControl.X1 = CLng(((ControlRecord(i).Left * xRatio) \ 100) - 75000)
  155.     Else
  156.       inControl.X1 = CLng((ControlRecord(i).Left * xRatio) \ 100)
  157.     End If
  158.     
  159.     inControl.Y1 = CLng((ControlRecord(i).Top * yRatio) \ 100)
  160.     If inControl.X2 < 0 Then
  161.       inControl.X2 = CLng(((ControlRecord(i).Width * xRatio) \ 100) - 75000)
  162.     Else
  163.       inControl.X2 = CLng((ControlRecord(i).Width * xRatio) \ 100)
  164.     End If
  165.  
  166.     inControl.Y2 = CLng((ControlRecord(i).Height * yRatio) \ 100)
  167.   Else
  168.     inControl.Move lLeft, lTop, lWidth, lHeight
  169.     inControl.Move lLeft, lTop, lWidth
  170.     inControl.Move lLeft, lTop
  171.   End If
  172. End Sub
  173.  
  174. Public Sub ResizeForm(pfrmIn As Form)
  175.   Dim FormControl As Control
  176.   Dim isVisible As Boolean
  177.   Dim StartX, StartY, MaxX, MaxY As Long
  178.   Dim bNew As Boolean
  179.   
  180.   If Not bRunning Then
  181.     bRunning = True
  182.     
  183.     If FindForm(pfrmIn) < 0 Then
  184.       bNew = True
  185.     Else
  186.       bNew = False
  187.     End If
  188.  
  189.     If pfrmIn.Top < 30000 Then
  190.       isVisible = pfrmIn.Visible
  191.       On Error Resume Next
  192.       
  193.       If Not pfrmIn.MDIChild Then
  194.         On Error GoTo 0
  195.         'pfrmIn.Visible = False
  196.       Else
  197.         If bNew Then
  198.           StartY = pfrmIn.Height
  199.           StartX = pfrmIn.Width
  200.           On Error Resume Next
  201.  
  202.           For Each FormControl In pfrmIn
  203.             If FormControl.Left + FormControl.Width + 200 > MaxX Then _
  204.               MaxX = FormControl.Left + FormControl.Width + 200
  205.             If FormControl.Top + FormControl.Height + 500 > MaxY Then _
  206.               MaxY = FormControl.Top + FormControl.Height + 500
  207.             If FormControl.X1 + 200 > MaxX Then _
  208.               MaxX = FormControl.X1 + 200
  209.             If FormControl.Y1 + 500 > MaxY Then _
  210.               MaxY = FormControl.Y1 + 500
  211.             If FormControl.X2 + 200 > MaxX Then _
  212.               MaxX = FormControl.X2 + 200
  213.             If FormControl.Y2 + 500 > MaxY Then _
  214.               MaxY = FormControl.Y2 + 500
  215.           Next FormControl
  216.           On Error GoTo 0
  217.           
  218.           pfrmIn.Height = MaxY
  219.           pfrmIn.Width = MaxX
  220.         End If
  221.         On Error GoTo 0
  222.  
  223.       End If
  224.       
  225.       For Each FormControl In pfrmIn
  226.         ResizeControl FormControl, pfrmIn
  227.       Next FormControl
  228.       On Error Resume Next
  229.  
  230.       If Not pfrmIn.MDIChild Then
  231.         On Error GoTo 0
  232.         pfrmIn.Visible = isVisible
  233.       Else
  234.         If bNew Then
  235.           pfrmIn.Height = StartY
  236.           pfrmIn.Width = StartX
  237.           
  238.           For Each FormControl In pfrmIn
  239.             ResizeControl FormControl, pfrmIn
  240.           Next FormControl
  241.         End If
  242.       End If
  243.       On Error GoTo 0
  244.       
  245.     End If
  246.     bRunning = False
  247.   End If
  248. End Sub
  249.  
  250. Public Sub SaveFormPosition(pfrmIn As Form)
  251.   Dim i As Long
  252.  
  253.   If MaxForm > 0 Then
  254.     For i = 0 To (MaxForm - 1)
  255.       If FormRecord(i).Name = pfrmIn.Name Then
  256.         FormRecord(i).Top = pfrmIn.Top
  257.         FormRecord(i).Left = pfrmIn.Left
  258.         FormRecord(i).Height = pfrmIn.Height
  259.         FormRecord(i).Width = pfrmIn.Width
  260.         Exit Sub
  261.       End If
  262.     Next i
  263.     AddForm (pfrmIn)
  264.   End If
  265. End Sub
  266.  
  267. Public Sub RestoreFormPosition(pfrmIn As Form)
  268.   Dim i As Long
  269.  
  270.   If MaxForm > 0 Then
  271.     For i = 0 To (MaxForm - 1)
  272.       If FormRecord(i).Name = pfrmIn.Name Then
  273.         If FormRecord(i).Top < 0 Then
  274.           pfrmIn.WindowState = 2
  275.         ElseIf FormRecord(i).Top < 30000 Then
  276.           pfrmIn.WindowState = 0
  277.           pfrmIn.Move FormRecord(i).Left, FormRecord(i).Top, FormRecord(i).Width, FormRecord(i).Height
  278.         Else
  279.           pfrmIn.WindowState = 1
  280.         End If
  281.         Exit Sub
  282.       End If
  283.     Next i
  284.   End If
  285. End Sub
  286.